package com.yanu.trace.t2s.controller;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yanu.trace.t2s.entity.Enterprise;
import com.yanu.trace.t2s.entity.User;
import com.yanu.trace.t2s.mapper.UserMapper;
import com.yanu.trace.t2s.service.EnterpriseService;
import com.yanu.trace.t2s.service.UserService;
import com.yanu.trace.t2s.util.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;


import java.io.File;
import java.io.IOException;
import java.util.List;

@CrossOrigin
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserService userService;
    @Autowired
    UserMapper userMapper;

    @Autowired
    EnterpriseService enterpriseService;

    /**
     * 查询所有用户
     * @return
     */
    @GetMapping("/fa")
    public List<User> findAll() {
        return userService.findAll();
    }

    /**
     * 根据用户id查询用户
     * @param userid
     * @return
     */
    @GetMapping("/fid/{userid}")
    public User find(@PathVariable int userid) {
        return userService.findByUserid(userid);
    }

    /**
     * 注册功能接口  传入一个用户实体
     * @param register_info
     * @return
     */
    @PostMapping("/register")
    public Message addUser(@RequestBody String register_info) {
        User user = JSON.parseObject(register_info, User.class);
        Enterprise enterprise = enterpriseService.getbyinvite_code(JSONObject.parseObject(register_info).getString("invite_code"));
        if (enterprise == null){
            user.setEnter_id(64);  //默认设置为1  为还没有对应到企业下面
        } else {
            user.setEnter_id(enterprise.getId());
        }
        Message msg = userService.register(user);
        return msg;
    }

    /**
     * 登陆功能 传入用户名和密码 登陆成功返回token
     * @param login_info
     * @return
     */
    @PostMapping("/login")
    public Message login(@RequestBody String login_info) {
        JSONObject jsonObject = JSONObject.parseObject(login_info);
        System.out.println(login_info);
        String username = jsonObject.getString("username");
        String password = jsonObject.getString("password");
        Message msg = userService.login(username, password);
        return msg;

    }

    /**
     * 登出  帮助前端返回登陆界面
     * @return
     */
    @PostMapping("/logout")
    public Message logout() {
        Message msg = new Message();
        msg.setSuccess(null);
        return msg;
    }

    /**
     * 取用户信息 必须带token  所以该函数为设置访问权限和控制用户权限
     * @param token
     * @return
     */
    @GetMapping("/info")
    public Message info(String token) {
        User user = userService.getinfo(token);
        if (user != null) {
            return new Message(200, "成功", user);
        } else
            return new Message(420, "获取失败", null);

    }

    /**
     * 根据用户名或者电话号查询用户是否存在 对应到找回密码的第一步
     * @param uat
     * @return
     */
    @PostMapping("/findByuat")
    public Message findByuat(@RequestBody String uat) {
        Message msg = new Message();
        JSONObject jsonObject = JSONObject.parseObject(uat);
        System.out.println(uat);
        String info = jsonObject.getString("info");
        QueryWrapper<User> wrapper = new QueryWrapper();

        wrapper.eq("username", info).or().eq("telephone", info).or().eq("email", info);
        User doUser = userService.getOne(wrapper, false);
        if (doUser == null) {
            msg.setMsg("未查询到");
            msg.setCode(403);
        } else {
            msg.setMsg("查询成功");
            msg.setCode(200);
        }
        return msg;


    }

    /**
     * 重新设置密码
     * @param resetInfo
     * @return
     */
    @PostMapping("/resetpassword")
    public Message resetpassword(@RequestBody String resetInfo) {
        Message msg = new Message();
        JSONObject jsonObject = JSONObject.parseObject(resetInfo);
        System.out.println(resetInfo);
        UpdateWrapper<User> wrapper = new UpdateWrapper();
        String resetinfo = jsonObject.getString("resetinfo");
        wrapper.eq("username", resetinfo).or().eq("telephone", resetinfo).or().eq("email", resetinfo).set("password", jsonObject.getString("password"));
        boolean result = userService.update(wrapper);
        if (result) {
            msg.setMsg("修改成功");
            msg.setCode(200);

        } else {
            msg.setMsg("修改失败");
            msg.setCode(404);

        }
        return msg;

    }

    /**
     * 分页返回全部用户信息
     * @param info
     * @return
     */
    @PostMapping("/list")
    public IPage<User> list(@RequestBody String info) {
        /**
         * Page(current,size)
         * current:当前页,long类型
         * size:每页显示的数量,long类型
         * 可参考其构造方法
         */
        JSONObject jsonObject = JSONObject.parseObject(info);
        IPage<User> iPage = userService.selectPage(new Page<>(jsonObject.getLong("current"), jsonObject.getLong("size")),
                jsonObject.getString("statename"), jsonObject.getString("statement"));  //为0则为无条件查询
        return iPage;
    }

    /**
     * 更新用户信息 传入user信息即可
     * @param userinfo
     * @return
     */
    @PostMapping("/update")
    public Message updateuserinfo(@RequestBody String userinfo) {
        Message message = new Message();
        User user = JSON.parseObject(userinfo, User.class);
        if (userService.updateById(user)) {
            message.setMsg("修改成功");
            message.setCode(200);
            message.setObj(user);
        } else {
            message.setMsg("修改失败");
            message.setCode(405);

        }
        return message;


    }

    /**
     * 删除用户
     * @param userinfo
     * @return
     */
    @PostMapping("/delete")
    public Message deleteuser(@RequestBody String userinfo) {
        Message message = new Message();
        User user = JSON.parseObject(userinfo, User.class);
        if (userService.removeById(user.getId())) {
            message.setMsg("删除成功");
            message.setCode(200);
        } else {
            message.setMsg("删除失败");
            message.setCode(406);

        }
        return message;
    }


    /**
     * 上传文件
     * @param file
     * @return
     */
    @PostMapping("/upf")
    @ResponseBody
    public Message upload(@RequestParam("file") MultipartFile file) {
        Message msg = new Message(200, "文件上传成功！", null);
        if (file.isEmpty()) {
            msg.setCode(502);
            msg.setMsg("请选择文件");
            return msg;
        }
        String fileName = file.getOriginalFilename();
        String filePath = "d:/";
        File dest = new File(filePath + fileName);
        try {
            file.transferTo(dest);
            System.out.println("ok");

            return msg;
        } catch (IOException e) {

        }
        msg.setCode(503);
        msg.setMsg("系统原因请重试");
        return msg;
    }

}
